package com.jk;

/**
 * Thread的常用方法
 * 1.start() 启动线程并执行相应的run()方法
 * 2.run() 子线程要执行的代码放入run()方法中
 * 3.currentThread() 静态的，调取当前的线程
 * 4.getName() 获取此线程的名字
 * 5.setName() 设置此线程的名字
 * 6.yield() 调用此方法的线程释放当前cpu的执行权
 * 7.join() 在a线程中调用b线程的join方法,会使a线程暂停执行，让b线程执行，直到b线程执行完毕，a线程继续执行
 * 8.isAlive() 判断线程是否存活
 * 9.sleep(long n) 显示的让该线程睡面 n 毫秒
 * 10.线程通信：wait()  notify()  notifyAll()
 * <p/>
 * 设置线程的优先级
 * getPriority(), 返回线程的优先级
 * setPriority(int newPrioity), 改变线程的优先级
 */
class SubThread1 extends Thread {

    @Override
    public void run() {
        //synchronized (TestThread.class){
        for (int i = 1; i <= 1000; i++) {
            System.out.println(Thread.currentThread().getName() + ":B===========>" + i + "---优先级：" + Thread.currentThread().getPriority());
//            if (i % 10 == 0)
//                Thread.currentThread().yield();
        }
        //}
    }
}

public class TestThread1 {

    public static void main(String[] args) {
        Thread.currentThread().setName("---主线程---");

        SubThread1 st1 = new SubThread1();

        st1.setName("子线程");
        st1.setPriority(10);
        st1.start();

        for (int i = 1; i <= 1000; i++) {
            System.out.println(Thread.currentThread().getName() + ":A===========>" + i + "---优先级：" + Thread.currentThread().getPriority());
//            try {
//                Thread.currentThread().sleep(100);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//            if (i == 20) {
//                try {
//                    st1.join();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
        }
        System.out.println(st1.isAlive());
    }
}
